#include <bits/stdc++.h>
using namespace std;
int n;
vector<pair<int, pair<int, int> > > w;
long long int a[200020], d, u[200020], v[200020];
void add_edge(int x, int y) {
  w.push_back(make_pair(labs(x - y) * d + a[x] + a[y], make_pair(x, y)));
}
void dfs(int s, int e) {
  if (s == e) return;
  int m = (s + e) / 2;
  dfs(s, m);
  dfs(m + 1, e);
  int A = s, B = e;
  for (int i = s; i <= m; i++)
    if (u[i] < u[A]) A = i;
  for (int i = m + 1; i <= e; i++)
    if (v[i] < v[B]) B = i;
  for (int i = s; i <= m; i++) add_edge(B, i);
  for (int i = m + 1; i <= e; i++) add_edge(A, i);
}
int ace[200020];
int ancestor(int x) { return x - ace[x] ? ace[x] = ancestor(ace[x]) : x; }
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> d;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    u[i] = a[i] - i * d;
    v[i] = a[i] + i * d;
    ace[i] = i;
  }
  dfs(0, n - 1);
  sort(w.begin(), w.end());
  long long int res = 0;
  for (auto p : w) {
    int x = p.second.first, y = p.second.second;
    x = ancestor(x);
    y = ancestor(y);
    if (x == y) continue;
    ace[x] = y;
    res += p.first;
  }
  cout << res << endl;
  return 0;
}
