#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, n) for(int i = 0; i < (n); i++)
#define rep1(i, n) for(int i = 1; i <= (n); i++)
#define co(x) cout << (x) << "\n"
#define cosp(x) cout << (x) << " "
#define ce(x) cerr << (x) << "\n"
#define cesp(x) cerr << (x) << " "
#define pb push_back
#define mp make_pair
#define Would
#define you
#define please

int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);


	ll N, D;
	cin >> N >> D;
	int A[200001];
	ll C[200001];
	C[0] = 1e18;
	ll motomoto = (N - 1) * D;
	rep1(i, N) {
		cin >> A[i];
		motomoto += A[i];
		C[i] = min(C[i - 1], A[i] - i * D);
	}
	ll saishou = 1e18;
	ll setuyaku = 0;
	for (int i = N - 1; i > 1; i--) {
		saishou = min(saishou, A[i + 1] + (i + 1) * D);
		motomoto += A[i];
		ll kari = min(saishou - i * D, C[i - 1] + i * D);
		if (A[i] > kari) setuyaku += A[i] - kari;
	}
	co(motomoto - setuyaku);

	Would you please return 0;
}
#include<bits/stdc++.h>
#define maxn 505050

using namespace std;
typedef long long ll;
struct edge{
    ll x,y,z;
}e[maxn*4];
ll ans,pre[maxn],fa[maxn],n,a[maxn],b[maxn],c[maxn],d,p,q;
int l[maxn],r[maxn];

int ffind(int x){
    if (pre[x]==x) return x;
    pre[x]=ffind(pre[x]); return pre[x];
}

void union_(int u,int v){
    pre[v]=u;
    b[u]=min(b[u],b[v]);
    c[u]=min(c[u],c[v]);
}

bool cmp(edge x,edge y){
    return x.z<y.z;
}

ll cost(int u,int v){
    return 1ll*abs(u-v)*d+a[u]+a[v];
}
ll f[maxn],g[maxn];

int main(){
    cin >> n >> d; int cnt=0;
    for (int i=1;i<=n;i++) cin >> a[i];
    for (int i=1;i<=n;i++) fa[i]=pre[i]=i,b[i]=a[i]-d*i,c[i]=a[i]+d*i;
    int tot=n;
    while (tot>1){
        int p=1; ll res=b[fa[1]];
        for (int i=2;i<=tot;i++){
            ll tmp=c[fa[i]];
            f[i]=tmp+res,g[i]=p;
            if (b[fa[i]]<res) res=b[fa[i]],p=i;
        }
        int q=n; res=c[fa[tot]];
        for (int i=tot-1;i;i--){
            ll tmp=b[fa[i]];
            if (i==1||tmp+res<f[i]) f[i]=tmp+res,g[i]=q;
            if (c[fa[i]]<res) res=c[fa[i]],q=i;
        }
        for (int i=1;i<=tot;i++){
            int u=ffind(fa[i]),v=ffind(fa[g[i]]);
            if (u!=v) union_(u,v),ans+=f[i];
        }
        tot=0;
        for (int i=1;i<=n;i++){
            fa[++tot]=ffind(i);
            while (i<n&&ffind(i+1)==fa[tot]) i++;
        }
    }
    cout << ans << endl;
}
