#include <bits/stdc++.h>
using namespace std;
#define LL long long
const auto Maxn = (LL) 1e5 + 10;
struct tree_Segment {
struct Tree_node {
int sum, l, r, lz;
};
Tree_node s[Maxn * 4];
inline void build(int i, int l, int r) {
s[i].l = l, s[i].r = r;
s[i].sum = 0;
if(l == r)
return ;
int mid = l + r >> 1;
build(i * 2, l, mid);
build(i * 2 + 1, mid + 1, r);
}
inline int search(int i, int l, int r) {
if(s[i].l >= l && s[i].r <= r)
return s[i].sum;
int ans = 0;
if(s[i * 2].r >= l) ans += search(i * 2, l, r);
if(s[i * 2 + 1].l <= r) ans += search(i * 2 + 1, l, r);
return ans;
}
inline void change(int i, int x, int v) {
if(s[i].l == s[i].r) {
s[i].sum += v;
return ;
}
int mid = s[i].l + s[i].r >> 1;
if(x <= mid) change(i * 2, x, v);
else change(i * 2 + 1, x, v);
s[i].sum = s[i * 2].sum + s[i * 2 + 1].sum;
}
}s;
void lsh(LL *l, int n) {
LL t[n + 1];
for(int i = 1; i <= n; i++) t[i] = l[i];
sort(t + 1, t + n + 1);
n = unique(t + 1, t + n + 1) - t;
for(int i = 1; i <= n; i++) l[i] = lower_bound(t + 1, t + n + 1, l[i]) - t;
}
int n;
LL a[Maxn];
LL sum;
LL la[Maxn], ra[Maxn];
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
lsh(a, n);
// for(int i = 1; i <= n; i++)
// cout << a[i] << " ";
// cout << endl;
s.build(1, 1, Maxn);
for(int i = 1; i <= n; i++) {
s.change(1, a[i], 1);
if(a[i] > 1)
la[i] = s.search(1, 1, a[i] - 1);
}
s.build(1, 1, Maxn);
for(int i = n; i >= 1; i--) {
s.change(1, a[i], 1);
if(a[i] < n)
ra[i] = s.search(1, a[i] + 1, Maxn);
}
for(int i = 2; i < n; i++) {
// cout << a[i] << " : " << la[i] << " " << ra[i] << endl;
sum += la[i] * ra[i];
}
cout << sum;
return 0;
}