Let's denote a function 

<image>

You are given an array a consisting of n integers. You have to calculate the sum of d(ai, aj) over all pairs (i, j) such that 1 ≤ i ≤ j ≤ n.

Input

The first line contains one integer n (1 ≤ n ≤ 200000) — the number of elements in a.

The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109) — elements of the array. 

Output

Print one integer — the sum of d(ai, aj) over all pairs (i, j) such that 1 ≤ i ≤ j ≤ n.

Examples

Input

5
1 2 3 1 3


Output

4


Input

4
6 6 5 5


Output

0


Input

4
6 6 4 4


Output

-8

Note

In the first example:

  1. d(a1, a2) = 0; 
  2. d(a1, a3) = 2; 
  3. d(a1, a4) = 0; 
  4. d(a1, a5) = 2; 
  5. d(a2, a3) = 0; 
  6. d(a2, a4) = 0; 
  7. d(a2, a5) = 0; 
  8. d(a3, a4) = - 2; 
  9. d(a3, a5) = 0; 
  10. d(a4, a5) = 2. 
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 200010;
int indexOf[MAX_N];
unsigned long long t[2 * MAX_N];
unsigned long long cnt[2 * MAX_N];
class Cmp {
 public:
  bool operator()(const pair<unsigned long long, int> &a,
                  const pair<unsigned long long, int> &b) const {
    return a.first < b.first;
  }
};
void buildTree(vector<pair<unsigned long long, int> > &a) {
  int n = a.size();
  for (int i = 0; i < n; ++i) {
    t[n + i] = a[i].first;
    cnt[n + i] = 1;
  }
  for (int i = n - 1; i > 0; --i) {
    t[i] = t[2 * i] + t[2 * i + 1];
    cnt[i] = cnt[2 * i] + cnt[2 * i + 1];
  }
}
void update(unsigned long long *t, int pos, unsigned long long val, int n) {
  pos += n;
  t[pos] = val;
  while (pos > 1) {
    t[pos / 2] = t[pos] + t[pos ^ 1];
    pos /= 2;
  }
}
unsigned long long query(unsigned long long *t, int l, int r, int n) {
  unsigned long long res = 0;
  for (l += n, r += n; l < r; l /= 2, r /= 2) {
    if (l % 2) {
      res += t[l++];
    }
    if (r % 2) {
      res += t[--r];
    }
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  vector<pair<unsigned long long, int> > a;
  for (int i = 0; i < n; ++i) {
    unsigned long long x;
    cin >> x;
    a.push_back({x, i});
  }
  sort(a.begin(), a.end());
  for (int i = 0; i < n; ++i) {
    indexOf[a[i].second] = i;
  }
  buildTree(a);
  unsigned long long res[2] = {0, 0};
  for (int i = 0; i < n; ++i) {
    int idx = indexOf[i];
    update(t, idx, 0, n);
    update(cnt, idx, 0, n);
    auto next =
        upper_bound(a.begin(), a.end(), make_pair(a[idx].first + 1, 0), Cmp());
    int pos = next - a.begin();
    if (pos != n) {
      res[0] += query(t, pos, n, n);
      res[1] += query(cnt, pos, n, n) * a[idx].first;
    }
    auto prev =
        upper_bound(a.begin(), a.end(), make_pair(a[idx].first - 2, 0), Cmp());
    pos = prev - a.begin();
    if (pos - 1 >= 0 && pos != n) {
      res[0] += query(t, 0, pos, n);
      res[1] += query(cnt, 0, pos, n) * a[idx].first;
    }
  }
  unsigned long long r;
  string sign = "";
  if (res[0] >= res[1]) {
    r = res[0] - res[1];
  } else {
    r = res[1] - res[0];
    sign = "-";
  }
  cout << sign << r << endl;
  return 0;
}
