#include <bits/stdc++.h>
using namespace std;
const long long INF = 1000000007;
const long long MAXN = 1000001;
bool prime[1000001];
void SieveOfEratosthenes() {
  memset(prime, true, sizeof(prime));
  for (int p = 2; p * p <= 1000000; p++) {
    if (prime[p] == true) {
      for (int i = p * p; i <= 1000000; i += p) prime[i] = false;
    }
  }
}
long long bs(vector<long long> a, long long s, long long e, long long x) {
  int l = s;
  int h = e;
  int m;
  while (l <= h) {
    m = (l + h) / 2;
    if (a[m] > x)
      h = m - 1;
    else if (a[m] < x)
      l = m + 1;
    else
      return m;
  }
  return -1;
}
long long mex(vector<long long> a, int n) {
  sort(a.begin(), a.end());
  int j = a[0];
  if (j != 0)
    return 0;
  else {
    for (int i = 1; i < n; i++) {
      if (a[i] != a[i - 1]) {
        if (a[i] != a[i - 1] + 1) {
          return j + 1;
        } else
          j++;
      }
    }
    return j + 1;
  }
}
int spf[MAXN];
void sieve() {
  spf[1] = 1;
  for (int i = 2; i < MAXN; i++) spf[i] = i;
  for (int i = 4; i < MAXN; i += 2) spf[i] = 2;
  for (int i = 3; i * i < MAXN; i++) {
    if (spf[i] == i) {
      for (int j = i * i; j < MAXN; j += i)
        if (spf[j] == j) spf[j] = i;
    }
  }
}
long long gcd(long long a, long long b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
long long c(long long m, long long n) {
  long long ans = 1;
  for (int i = 1; i <= n; i++) {
    ans = (ans * (m - i + 1)) / i;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long test;
  test = 1;
  while (test--) {
    long long n;
    cin >> n;
    long long a[n];
    for (int i = 0; i < n; i++) {
      cin >> a[i];
    }
    long long ans = 0;
    for (int i = n - 1; i > 0; i--) {
      if (a[i - 1] > a[i]) ans += (a[i - 1] - a[i]) * (n - i);
    }
    cout << ans << "\n";
  }
}
