#include<bits/stdc++.h>
using namespace std;
int n;
const int maxn = 3e4 + 5;
int val[maxn << 2];
int big[maxn], small[maxn], a[maxn], b[maxn] ;
void pushup(int rt){
val[rt] = val[rt<<1] + val[rt<<1|1];
}
void update(int rt, int l, int r, int x){
if (l == r){
val[x]++;
return ;
}
int mid = (l+r)>>1;
if(x <= mid){
update(rt<<1,l,mid,x);
}else{
update(rt<<1|1,mid+1,r,x);
}
pushup(rt);
}
int query(int rt, int l, int r, int ql, int qr)
{
if (ql <= l && r <= qr){
return val[rt];
}
int mid = (l+r)>>1;
int ans = 0;
if(ql <= mid) ans += query(rt<<1,l,mid,ql,qr);
if(qr > mid) ans += query(rt<<1|1,mid+1,r,ql,qr);
return ans;
}
int main () {
cin >> n;
for (int i = 1; i <= n ;i++){
cin >> a[i];
b[i] = a[i];
}
sort(b+1,b+1+n);
int m = unique(b+1,b+1+n) - b - 1;
for (int i = 1; i <= n; i++){
int id = lower_bound(b+1,b+1+m,a[i])-b;
a[i] = id;
}
for (int i = 1; i <= n; i++){
if (a[i] - 1 > 0){
small[i] = query(1,1,n,1,a[i]-1);
}
update(1,1,n,a[i]);
}
memset(val,0,sizeof(val));
for (int i = 1; i <= n; i++){
if (a[i] + 1 <= n){
big[i] = query(1,1,n,a[i]+1,n);
}
update(1,1,n,a[i]);
}
int ans = 0;
for (int i = 1; i <= n ;i++){
ans += small[i] * big[i];
}
cout << ans;
return 0;
}