#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 12;
int n;
long long a[maxn], ans;
long long seg[maxn], dp[maxn];
map<long long, int> mp;
vector<int> v;
void init();
void doit1();
void add(int id, long long val);
long long get(int id);
void doit2();
void vitex();
int main() {
  init();
  doit1();
  vitex();
  doit2();
  cout << ans;
  return 0;
}
void init() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    v.push_back(a[i]);
  }
  sort(v.begin(), v.end());
  mp[v[0]] = 0;
  for (int i = 1; i < n; i++) {
    if (v[i] == v[i - 1]) continue;
    mp[v[i]] = i;
  }
  for (int i = 0; i < n; i++) {
    a[i] = mp[a[i]];
  }
}
void doit1() {
  for (int i = n - 1; i >= 0; i--) {
    dp[i] = get(a[i]);
    add(a[i] + 1, 1);
  }
}
void doit2() {
  for (int i = n - 1; i >= 0; i--) {
    ans += get(a[i]);
    add(a[i] + 1, dp[i]);
  }
  return;
}
void add(int id, long long val) {
  for (int i = id; i < maxn; i += (i & -i)) {
    seg[i] += val;
  }
  return;
}
long long get(int id) {
  long long ret = 0;
  for (int i = id; i >= 1; i -= (i & -i)) {
    ret += seg[i];
  }
  return ret;
}
void vitex() {
  for (int i = 0; i < maxn; i++) {
    seg[i] = 0;
  }
  return;
}
