#include<iostream>#include<string>#include<cstdio>#include<algorithm>#include<cstdlib>#include<cstring>#include<cmath>#include<utility>#include<unordered_set>#include<queue>#include<deque>usingnamespace std;int f[1010];char g[1010][1010];int dx[4]={1,-1,0,0};int dy[4]={0,0,1,-1};structNode{int x, y, d;Node(int x_,int y_,int d_):x(x_),y(y_),d(d_){}};constint N =1e5+10;int tr[N];int n;int A[N];int r[N];int l[N];inlineintlowbit(int x){return x &-x;}voidadd(int idx,int v){for(int i = idx; i <= n; i +=lowbit(i)){
tr[i]+= v;}}intquery(int idx){int res =0;for(int i = idx; i; i -=lowbit(i)) res += tr[i];return res;}using i64 =longlong;intmain(){int x;
cin >> n;for(int i =1; i <= n; i ++){
cin >> A[i];}// 统计右边比当前值小memset(tr,0,sizeof tr);for(int i = n; i >0; i--){
r[i]=query(A[i]-1);// 求1~A[i]-1的前缀和add(A[i],1);}// 统计左边比当前值大// cout<<"yyy"<<endl;memset(tr,0,sizeof tr);for(int i =1; i <= n; i++){
l[i]=query(n)-query(A[i]);// 查询1到k的前缀和add(A[i],1);}
i64 res =0;for(int i =1; i <= n; i ++){// cout<<"l = "<<l[i]<<" r = "<<r[i]<<endl;
res += l[i]*(i64)r[i];}
cout<<res<<endl;return0;}