#include<bits/stdc++.h>
#define ll long long
#define i128 __int128
#define ull unsigned long long
#define pii pair<int,int>
#define pll pair<long long, long long>
#define fs first
#define sc second
#define x0 _x0_
#define y1 _y1_
#define endl '\n'
#define re register
#define pb push_back
#define vi vector<int>
#define pq priority_queue
#define mem(a,x) memset((a),(x),sizeof(a))
#define debug puts("AK IOI")
#define sz(s) (int)(s.size())
#define all(a) a.begin(),a.end()
#define rd(l,r) (myrand()%(r-l+1)+l)
#define print(x) {cout<<x<<endl;return;}
#define ctn(e) if(e) continue
#define brk(e) if(e) break
#define rt(e) if(e) return
#define ll_(e) (1ll*(e))
#define For(x,y,z) for(int x = y;x <= z;x++)
#define For_(x,y,z) for(int x = y;x >= z;x--)
#define double long double
#define mkp make_pair
using namespace std;
#define int unsigned long long
const int mod = 1e9+7;
mt19937 myrand(time(0));
const int inf = 0x3f3f3f3f,N = 1e6+5,M = 1e6+5,K = 3000+5;
const long long linf = 0x3f3f3f3f3f3f3f3f;
int n;
struct node{
int x,cx;
}a[N];
int unx[N];
map<int,int> mpx;
struct SegmentTree{
struct node{long long l,r,sum,lazy;}t[N<<2];
void build (long long p,long long l,long long r){
t[p].l = l,t[p].r = r;
if(l == r) {return ;}
long long mid = (l+r) >> 1;
build(p * 2,l,mid),build(p * 2 + 1,mid + 1,r);
t[p].sum = t[p * 2].sum + t[p * 2 + 1].sum;
}void Add(long long p,long long x){
t[p].lazy += x,t[p].sum += x * (t[p].r - t[p].l + 1);
}void pushdown(long long p){
if(t[p].lazy != 0 && t[p].l != t[p].r)
Add(p*2,t[p].lazy),Add(p*2+1,t[p].lazy),
t[p].lazy = 0;
}void update(long long p,long long l,long long r,long long x){
pushdown(p); if(l <= t[p].l && t[p].r <= r){ Add(p,x); return ;}
long long mid = (t[p].r + t[p].l) >> 1;
if(l <= mid) update(p * 2,l,r,x);
if(r > mid) update(p * 2 + 1,l,r,x);
t[p].sum = t[p * 2].sum + t[p * 2 + 1].sum ;
}void modify(long long p,long long x,long long v){
if(t[p].l == t[p].r){t[p].sum=v;return;}
long long mid = (t[p].l + t[p].r )>> 1;
if(x <= mid) modify(p * 2 ,x ,v);
else modify(p * 2 + 1,x,v);
t[p].sum = t[p * 2].sum + t[p * 2 + 1].sum;
}ll query(long long p,long long l,long long r){
if(l <= t[p].l && t[p].r <= r) return t[p].sum;
pushdown(p);
long long mid = (t[p].l + t[p].r) >> 1;
ll ans = 0;
if(mid>=l) ans += query(p * 2,l,r);
if(mid<r) ans+= query(p * 2+1,l,r);
return ans;
}
}segx,segxx;
void solve(){
cin >> n;
For(i,1,n) {
cin >> a[i].x;
unx[i]=a[i].x;
}
sort(unx+1,unx+1+n);
unx[0] = unique(unx+1,unx+1+n)-unx-1;
For(i,1,unx[0])mpx[unx[i]]=i;
For(i,1,n){
a[i].cx = mpx[a[i].x];
}
segx.build(1,1,unx[0]);
segxx.build(1,1,unx[0]);
int ans=0;
For(i,1,n){
ans += (a[i].x * segxx.query(1,1,a[i].cx)) - (segx.query(1,1,a[i].cx));
segx.modify(1,a[i].cx,a[i].x);
segxx.modify(1,a[i].cx,1);
}cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int T=1;
For(_,1,T) solve();
return 0;
}