#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=1e5+5;
ll n,s[N],c[N],ans,c1[N],c2[N];
struct node{ll x,id;}p[N];
bool cmp(node a,node b){return a.x<b.x;}
void add(ll x,ll c[]){while(x<=n)c[x]++,x+=x&-x;}
void del(ll x,ll c[]){while(x<=n)c[x]--,x+=x&-x;}
ll ask(ll x,ll c[]){
ll ret=0;
while(x>0)ret+=c[x],x-=x&-x;
return ret;
}
int main()
{
ll i,t1=0,t2=0,tot=0;
scanf("%lld",&n);
for(i=1;i<=n;i++)scanf("%lld",&p[i].x),p[i].id=i;
p[0].x=-1e8;
sort(p+1,p+1+n,cmp);
for(i=1;i<=n;i++){
if(p[i].x!=p[i-1].x)tot++;
s[p[i].id]=tot;
}
for(i=1;i<=n;i++)t1+=ask(s[i]-1,c),add(s[i],c);
memset(c,0,sizeof(c));
for(i=n;i>=1;i--)t2+=ask(s[i]-1,c),add(s[i],c);
ans=t1*t2;
for(i=1;i<=n;i++){
t1=ask(s[i]-1,c1),t2=ask(tot-s[i],c2);
add(s[i],c1),add(tot-s[i]+1,c2);
ans-=t1*t2;
}
memset(c1,0,sizeof(c1)),memset(c2,0,sizeof(c2));
for(i=1;i<=n;i++)add(s[i],c2);
for(i=1;i<=n;i++){
t1=ask(s[i]-1,c1),t2=ask(s[i]-1,c2);
add(s[i],c1),del(s[i],c2);
ans-=t1*t2;
}
memset(c1,0,sizeof(c1));
for(i=1;i<=n;i++)add(tot-s[i]+1,c1),add(s[i],c2);
for(i=1;i<=n;i++){
t1=ask(tot-s[i],c1),t2=ask(s[i]-1,c2);
del(tot-s[i]+1,c1),del(s[i],c2);
ans-=t1*t2;
}
for(i=1;i<=n;i++)add(tot-s[i]+1,c1);
for(i=1;i<=n;i++){
t1=ask(tot-s[i],c1),t2=ask(tot-s[i],c2);
del(tot-s[i]+1,c1),add(tot-s[i]+1,c2);
ans-=t1*t2;
}
cout<<ans;
}