#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define deb(x) cout<<#x<<" "<<x<"\n"
#define mod 1000000007
ll mergeArray(ll *a, int low, int high)
{
int mid=(low+high);
int i=low,k=low;
int j=mid+1;
ll temp[100005];
ll alphaScore=0;
while((i<=mid) && (j<=high))
{
if(a[i]<a[j])
{
alphaScore=(alphaScore%mod+((high-j+1)*a[i])%mod)%mod;
temp[k++]=a[i++];
}
else
{
temp[k++]=a[j++];
}
}
while(i<=mid)
temp[k++]=a[i++];
while(j<=high)
temp[k++]=a[j++];
for(int i=low;i<=high;i++)
a[i]=temp[i];
return alphaScore;
}
ll mergeSort(ll *a, int low, int high)
{
ll alphaScore=0;
if(high>low)
{
int mid=(low+high)/2;
alphaScore=mergeSort(a,0,mid);
alphaScore=(alphaScore+ mergeSort(a,mid+1,high))%mod;
alphaScore=(alphaScore+mergeArray(a,low,high))%mod;
}
else
return alphaScore;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,i;
cin>>n;
ll a[n];
for(i=0;i<n;i++)
cin>>a[i];
cout<<mergeSort(a,0,n-1);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBkZWIoeCkgY291dDw8I3g8PCIgIjw8eDwiXG4iCiNkZWZpbmUgbW9kIDEwMDAwMDAwMDcKCmxsIG1lcmdlQXJyYXkobGwgKmEsIGludCBsb3csIGludCBoaWdoKQp7CiAgICBpbnQgbWlkPShsb3craGlnaCk7CiAgICBpbnQgaT1sb3csaz1sb3c7CiAgICBpbnQgaj1taWQrMTsKCiAgICBsbCB0ZW1wWzEwMDAwNV07CiAgICBsbCBhbHBoYVNjb3JlPTA7CiAgICB3aGlsZSgoaTw9bWlkKSAmJiAoajw9aGlnaCkpCiAgICB7CiAgICAgICAgaWYoYVtpXTxhW2pdKQogICAgICAgIHsKICAgICAgICAgICAgYWxwaGFTY29yZT0oYWxwaGFTY29yZSVtb2QrKChoaWdoLWorMSkqYVtpXSklbW9kKSVtb2Q7CiAgICAgICAgICAgIHRlbXBbaysrXT1hW2krK107CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHRlbXBbaysrXT1hW2orK107CiAgICAgICAgfQogICAgfQoKICAgIHdoaWxlKGk8PW1pZCkKICAgICAgICB0ZW1wW2srK109YVtpKytdOwogICAgd2hpbGUoajw9aGlnaCkKICAgICAgICB0ZW1wW2srK109YVtqKytdOwogICAgZm9yKGludCBpPWxvdztpPD1oaWdoO2krKykKICAgICAgICBhW2ldPXRlbXBbaV07CiAgICByZXR1cm4gYWxwaGFTY29yZTsKfQoKCmxsIG1lcmdlU29ydChsbCAqYSwgaW50IGxvdywgaW50IGhpZ2gpCnsKICAgIGxsIGFscGhhU2NvcmU9MDsKICAgIGlmKGhpZ2g+bG93KQogICAgewogICAgICAgIGludCBtaWQ9KGxvdytoaWdoKS8yOwogICAgICAgIGFscGhhU2NvcmU9bWVyZ2VTb3J0KGEsMCxtaWQpOwogICAgICAgIGFscGhhU2NvcmU9KGFscGhhU2NvcmUrIG1lcmdlU29ydChhLG1pZCsxLGhpZ2gpKSVtb2Q7CiAgICAgICAgYWxwaGFTY29yZT0oYWxwaGFTY29yZSttZXJnZUFycmF5KGEsbG93LGhpZ2gpKSVtb2Q7CgogICAgfQogICAgZWxzZQogICAgICAgIHJldHVybiBhbHBoYVNjb3JlOwp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgaW50IG4saTsKICAgIGNpbj4+bjsKICAgIGxsIGFbbl07CiAgICBmb3IoaT0wO2k8bjtpKyspCiAgICAgICAgY2luPj5hW2ldOwogICAgY291dDw8bWVyZ2VTb3J0KGEsMCxuLTEpOwogICAgcmV0dXJuIDA7Cn0K