#include <fstream>
#define INF 4611686018427387903
using namespace std;
ifstream fin("biscuiti.in");
ofstream fout("biscuiti.out");
long long v[100003],n,i;
unsigned long long sum,s;
struct {long long m,a,p;}A[400003];
void build(long long nod,long long p,long long u){
if(p==u){
fin>>A[nod].m;
s+=A[nod].m;
A[nod].p=p;
return;
}
long long mid=(p+u)/2;
build(2*nod,p,mid);
build(2*nod+1,mid+1,u);
long long left=A[2*nod].m+A[2*nod].a;
long long right=A[2*nod+1].m+A[2*nod+1].a;
if(left<=right){
A[nod].m=left;
A[nod].p=A[2*nod].p;
}
else{
A[nod].m=right;
A[nod].p=A[2*nod+1].p;
}
}
void update(long long nod,long long p,long long u,long long a,long long b,long long val){
if(a<=p && u<=b){
A[nod].a+=val;
return;
}
if(p==u)
return;
long long mid=(p+u)/2;
if(a<=mid){
A[2*nod].a+=A[nod].a;
A[2*nod+1].a+=A[nod].a;
A[nod].a=0;
update(2*nod,p,mid,a,b,val);
}
if(b>mid){
A[2*nod].a+=A[nod].a;
A[2*nod+1].a+=A[nod].a;
A[nod].a=0;
update(2*nod+1,mid+1,u,a,b,val);
}
long long left=A[2*nod].m+A[2*nod].a;
long long right=A[2*nod+1].m+A[2*nod+1].a;
if(left<=right){
A[nod].p=A[2*nod].p;
A[nod].m=A[2*nod].m;
}
else{
A[nod].p=A[2*nod+1].p;
A[nod].m=A[2*nod+1].m;
}
}
void sterge(long long nod,long long p,long long u,long long a){
if(p==u){
A[nod].m=INF;
A[nod].a=0;
return;
}
if(p>u || (a<p && a<u) || (a>p && a>u))
return;
long long mij=(p+u)/2;
if(a<=mij){
A[2*nod].a+=A[nod].a;
A[2*nod+1].a+=A[nod].a;
A[nod].a=0;
sterge(2*nod,p,mij,a);
}
if(a>mij){
A[2*nod].a+=A[nod].a;
A[2*nod+1].a+=A[nod].a;
A[nod].a=0;
sterge(2*nod+1,mij+1,u,a);
}
long long left=A[2*nod].m+A[2*nod].a;
long long right=A[2*nod+1].m+A[2*nod+1].a;
if(left<=right){
A[nod].m=left;
A[nod].p=A[2*nod].p;
}
else{
A[nod].m=right;
A[nod].p=A[2*nod+1].p;
}
}
int main(){
fin>>n;
build(1,1,n);
for(i=1;i<=n;i++){
sum+=A[1].m;
update(1,1,n,1,A[1].p-1,i);
sterge(1,1,n,A[1].p);
}
fout<<sum-s<<'\n';
fin.close();fout.close();
return 0;
}