#include<iostream>
#include <stdio.h>
#include <algorithm>
#define maxn 2000000+5
using namespace std;
int  pre[maxn*maxn],n,d;
int Find(int x)
{
    int r=x;
    while(r!=pre[r])
        r=pre[r];
    int i=x,j;
    while(pre[i]!=r){
        j=pre[i];
        pre[i]=r;
        i=j;
    }
    return r;
}
void mix(int x,int y)
{
    int fx=Find(x),fy=Find(y);
    if(fx!=fy){
        pre[fy]=fx;
    }
}
void init(){
    for(int i=0;i<maxn*maxn-5;i++)pre[i]=i;
}
struct node {
    int u,v;
    long long int c;
};
node co[maxn*maxn];
int a[maxn*maxn];
bool cmp(node x,node y){
    return x.c<y.c;
}
int main()
{
   scanf("%d%d",&n,&d);
   init();
   for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
   }
   int coun=0;
   for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            co[coun].u=i;co[coun].v=j;
            co[coun++].c=(j-i)*d+a[i]+a[j];
           // cout<<co[coun-1].c<<endl;
        }
   }
   sort(co,co+coun,cmp);
   long long int ans=0;
   for(int i=0;i<coun;i++){
        //cout<<co[i].v<<endl;
        int u=co[i].u,v=co[i].v;
        if(Find(u)!=Find(v)){
            mix(u,v);
            mix(v,u);
            ans+=co[i].c;
        }
   }
   printf("%lld",ans);
    return 0;
}//dellaserss
