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;
class BigInt {
 public:
  string value;
  bool sign;
  BigInt();
  BigInt(string);
  BigInt(long long);
  BigInt operator+(BigInt &);
  BigInt operator-(BigInt &);
  bool operator==(BigInt &);
  bool operator!=(BigInt &);
  bool operator>(BigInt &);
  bool operator<(BigInt &);
  BigInt operator++(int);
  BigInt operator--(int);
  friend ostream &operator<<(ostream &, const BigInt &);
  friend istream &operator>>(istream &, BigInt &);
};
string toString(long long n) {
  stringstream t;
  t << n;
  return t.str();
}
string add(string a, string b) {
  if (a.length() > b.length()) swap(a, b);
  a = string(b.length() - a.length(), '0') + a;
  string res = "";
  int carry = 0;
  for (int i = a.length() - 1; i >= 0; i--) {
    carry += (a[i] - '0') + (b[i] - '0');
    res = char(carry % 10 + '0') + res;
    carry /= 10;
  }
  res = (carry != 0 ? string(1, char(carry + '0')) : "") + res;
  return res;
}
string sub(string a, string b) {
  b = string(a.length() - b.length(), '0') + b;
  string res = "";
  for (int i = a.length() - 1; i >= 0; i--) {
    if (a[i] >= b[i])
      res = char(a[i] - b[i] + '0') + res;
    else {
      for (int j = i - 1; j >= 0; j--) {
        if (a[j] != '0') {
          a[j]--;
          break;
        } else
          a[j] = '9';
      }
      res = char(10 + a[i] - b[i] + '0') + res;
    }
  }
  return res.find_first_not_of("0") != -1
             ? res.substr(res.find_first_not_of("0"))
             : "0";
}
int compare(string a, string b) {
  if (a.length() != b.length()) return a.length() > b.length();
  for (int i = 0; i < a.length(); i++)
    if (a[i] != b[i]) return a[i] > b[i];
  return 2;
}
BigInt::BigInt(string s) {
  value = s[0] == '-' ? s.substr(1) : s;
  sign = s[0] == '-' && s.substr(1) != "0";
  value = s.find_first_not_of("-0") != -1 ? s.substr(s.find_first_not_of("-0"))
                                          : "0";
}
BigInt::BigInt(){};
BigInt::BigInt(long long n) : BigInt(toString(n)) {}
BigInt BigInt::operator+(BigInt &secondNumber) {
  if (sign == secondNumber.sign)
    return BigInt((sign ? "-" : "") + add(value, secondNumber.value));
  else if (compare(value, secondNumber.value) == 1)
    return BigInt((sign ? "-" : "") + sub(value, secondNumber.value));
  else
    return BigInt((secondNumber.sign ? "-" : "") +
                  sub(secondNumber.value, value));
}
BigInt BigInt::operator-(BigInt &secondNumber) {
  BigInt a = *this,
         b = BigInt((secondNumber.sign ? "" : "-") + secondNumber.value);
  return a + b;
}
bool BigInt::operator==(BigInt &secondNumber) {
  return value == secondNumber.value && sign == secondNumber.sign;
}
bool BigInt::operator!=(BigInt &secondNumber) {
  return !(*this == secondNumber);
}
bool BigInt::operator>(BigInt &secondNumber) {
  BigInt res = *this - secondNumber;
  return !res.sign && res.value != "0";
}
bool BigInt::operator<(BigInt &secondNumber) {
  return !(*this > secondNumber) && *this != secondNumber;
}
BigInt BigInt::operator++(int dummy) {
  BigInt a = *this, b = BigInt("1");
  *this = a + b;
  return a;
}
BigInt BigInt::operator--(int dummy) {
  BigInt a = *this, b = BigInt("1");
  *this = a - b;
  return a;
}
ostream &operator<<(ostream &out, const BigInt &c) {
  out << (c.sign ? "-" : "") << c.value;
  return out;
}
istream &operator>>(istream &in, BigInt &c) {
  string s;
  in >> s;
  c = BigInt(s);
  return in;
}
int dx[] = {0, 0, 1, -1, 1, 1, -1, -1};
int dy[] = {1, -1, 0, 0, -1, 1, 1, -1};
int main() {
  long long n;
  scanf("%lld", &n);
  map<long long, long long> f;
  long long x, cnt = 0;
  long long sum = 0;
  BigInt ans = 0;
  for (int i = 0; i < n; i++) {
    scanf("%lld", &x);
    long long prev = cnt - f[x] - f[x + 1] - f[x - 1];
    long long nwSum =
        sum - (f[x] * x) - (f[x + 1] * (x + 1)) - (f[x - 1] * (x - 1));
    BigInt add = prev * x - nwSum;
    ans = ans + add;
    sum += x;
    cnt++;
    f[x]++;
  }
  cout << ans;
}
