#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a, b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define DBG printf("this is a input\n")
#define fi first
#define se second
#define mk(a, b) make_pair(a,b)
#define p_queue priority_queue
const int maxn = 500005;
ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a % b);
}
ll lcm(ll a, ll b) {
return a / gcd(a, b) * b;
}
struct node
{
int l , r, v;
}tree[maxn<<2];
void build(int i , int l , int r)
{
tree[i].l = l , tree[i].r = r, tree[i].v = 0;
if(l == r)
return ;
int mid = (l + r) >> 1;
build(i*2,l,mid);
build(i*2+1,mid+1,r);
}
ll query(int i, int l , int r)
{
if(tree[i].l >= l && tree[i].r <= r)
return tree[i].v;
ll ans = 0;
if(l <= tree[i*2].r)
ans += query(i*2,l,r);
if(tree[i*2+1].l <= r)
ans += query(i*2+1,l,r);
return ans;
}
void update(int i , int k)
{
if(tree[i].l == tree[i].r)
{
if(tree[i].l == k)
tree[i].v ++;
return ;
}
if(k <= tree[i*2].r)
update(i*2,k);
if(k >= tree[i*2+1].l)
update(i*2+1,k);
tree[i].v = tree[i*2].v + tree[i*2+1].v;
}
int n;
int input[maxn] , co[maxn];
int main(void)
{
ll ans = 0;
cin>>n;
build(1,1,n);
for(int i = 1 ; i <= n ; i ++)
cin>>input[i], co[i] = input[i];
sort(co+1,co+1+n);
for(int i = 1 ; i <= n ; i ++)
{
int temp = lower_bound(co+1,co+1+n,input[i])-co;
if(temp != n)
ans += query(1,temp+1,n);
update(1,temp);
}
cout<<ans<<endl;
}