#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pi = pair<ll, ll>;
using ld = long double;
const int N = 1e6+ 10;
int mod = 1e9 + 7;
ll n,m;
ll a[N];
int tree[N];
void add(int x, int val) {
for(int i = x; i <= 1e6; i += (i & (-i))) tree[i] += val;
}
int query(int x) {
int ret = 0;
if(!x) return 0;
for(int i = x; i; i -= (i & (-i))) ret += tree[i];
return ret;
}
void solve()
{
cin >> n;
vector<ll> index(N, 0);
vector<ll> pre(n+5, 0);
vector<int> mx(n+5, 0);
vector<ll> g[N];
for(int i = 1; i <= n; i++) {
cin >> a[i];
add(a[i], 1);
g[a[i]].push_back(i);
if(index[a[i]] == 0) {
index[a[i]] = i;
mx[i] = i - query(a[i]);
continue;
}
mx[i] = i - query(a[i]);
int ret = query(a[i]);
pre[i] = (i - ret) - mx[index[a[i]]];
index[a[i]] = i;
}
ll sum = 0;
for(int i = 1; i <= 1e6; i++) {
if(g[i].size() <= 1) continue;
ll ans = 0;
m = g[i].size();
for(int j = 1; j < g[i].size(); j++) {
ans += pre[g[i][j]] * (ll)j * (m - j);
}
vector<int> tem;
for(int j = 0; j < g[i].size(); j++) tem.push_back(g[i][j] % 2);
vector<ll> p(m+5), l(m+5);
for(int j = 1; j <= m; j++) {
p[j] = p[j - 1] + (tem[j - 1] == 0);
l[j] = l[j - 1] + (tem[j - 1] == 1);
}
for(int j = 2; j <= m; j++) {
ll pp = (ll)p[j-1] * (l[m] - l[j-1]);
ans += pre[g[i][j-1]] * pp;
pp = (ll)l[j-1] * (p[m] - p[j-1]);
ans += pre[g[i][j-1]] * pp;
}
sum += ans;
}
cout << sum;
}
int main()
{
// 请在此输入您的代码
ios::sync_with_stdio(0);
cin.tie(0);
int _ = 1;
// cin >> _;
while(_--) solve();
}