#include <bits/stdc++.h>
using namespace std;
void update(int i, int k, vector<int> &fw) {
while (i<(int)fw.size()) {
fw[i] += k;
i+=-i&i;
}
}
int getsm(int i, vector<int> &fw) {
int ans=0;
while (i>0) {
ans+=fw[i];
i-=-i&i;
}
return ans;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int n;
cin>> n;
vector<int> a(n);
for (int i=0; i<n; i++) cin>> a[i];
vector<int> tem = a;
sort(tem.begin(), tem.end());
tem.erase(unique(tem.begin(), tem.end()), tem.end());
for (int i=0; i<n; i++) {
auto it = lower_bound(tem.begin(), tem.end(), a[i]);
a[i] = it-tem.begin()+1;
}
vector<int> left(n+1, 0);
vector<int> fw(n+1, 0);
for (int i=0; i<n; i++) {
update(a[i], 1, fw);
left[i] = getsm(a[i]-1, fw);
}
for (int i=0; i<=n; i++) fw[i] = 0;
long long ans = 0LL;
for (int i=n-1; i>=0; i--) {
update(a[i], 1, fw);
ans += (long long)getsm(a[i]-1, fw) * (long long)left[i];
}
cout<< ans;
}