#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
#include <unordered_map>
#define int long long
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define f first
#define s second
#define endl '\n'
#define all(x) begin(x),end(x)
int const N = 3e5+10;
int fenwick[N];
int si;
void update(int n,int val){
for(;n <= si;n += n&-n) fenwick[n] += val;
}
int query(int n){
int sum = 0;
for(;n > 0;n -= n&-n) sum += fenwick[n];
return sum;
}
signed main(){
int n;cin >> n;
vector<int> coor;
vector<int> vc;
vector<int> left;
for(int i{};i < n;i++){
int g;cin >> g;
vc.emplace_back(g);
coor.emplace_back(g);
}
sort(all(coor));
coor.erase(unique(all(coor)),coor.end());
si = coor.size()+1;
int ans = 0;
for(int i{};i < n;i++){
vc[i] = lower_bound(all(coor),vc[i])-coor.begin()+1;
update(vc[i]+1,1);
left.emplace_back(query(vc[i]));
}
for(int i{};i <= si;i++){
fenwick[i] = 0;
}
for(int i{n-1};i >= 0;i--){
update(vc[i]+1,1);
ans += left[i]*query(vc[i]);
}
cout << ans;
}