#include <bits/stdc++.h>
using namespace std;
long long n, a[200005], pos[200005], it[800005], tmp;
void update(long long k, long long l, long long r, long long i){
if(l > i || r < i) return;
if(l == r){
it[k] = min(it[k], a[i]);
return;
}
long long m = (l + r) / 2;
update(2 * k, l, m, i);
update(2 * k + 1, m + 1, r, i);
it[k] = min(it[2 * k], it[2 * k + 1]);
}
void get(long long k, long long l, long long r, long long u, long long v){
if(l > v || r < u) return;
if(u <= l && r <= v){
tmp = min(tmp, it[k]);
return;
}
long long m = (l + r) / 2;
get(2 * k, l, m, u, v);
get(2 * k + 1,m + 1, r, u, v);
}
long long tinh(long long x, long long y){
if(x > y) return 0;
if(x == y) return a[x];
tmp = LONG_LONG_MAX;
get(1, 1, n, x, y);
long long vt = pos[tmp];
long long kq = ((vt - x) * (y - vt) + (vt - x) + (y - vt) + 1) * tmp;
return kq + tinh(x, vt - 1) + tinh(vt + 1, y);
}
int main()
{
cin >> n;
for(long long i = 1; i <= 4 * n; i++) it[i] = LONG_LONG_MAX;
for(long long i = 1; i <= n; i++){
cin >> a[i];
pos[a[i]] = i;
update(1, 1, n, i);
}
cout << tinh(1, n);
}