#include <bits/stdc++.h>
#define sc(x) scanf("%d",&x);
#define pr(x) printf("%d \n",x);
#define scll(x) scanf("%lld",&x);
#define scll2(x,y) scanf("lld",&x,&y);
#define prll(x) printf("%lld \n",x);
#define sc2(x,y) scanf("d",&x,&y);
#define ll long long
#define PB push_back
#define MP make_pair
#define PII pair<int,int>
using namespace std;
int n,l,r;
ll a[100000+10],x,mod=1e9 + 7;
int R[100000+10],L[100000+10];
ll ans;
stack<int> s;
int main(){
// move the declaration inside as it cant be handled by the stack,
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
// remove the mod statement to prevent changing the value beforehand
a[i] += i+1;
}
L[0]=0;
s.push(0);
for(int i=1;i<n;i++){
while(!s.empty() && a[i] > a[s.top()]){
//add a -1 in i-s.top()
R[s.top()] = i-1-s.top();
s.pop();
}
//add a -1 in i-s.top()
L[i] = (s.empty())? i : i-s.top()-1;
s.push(i);
}
while(!s.empty()){
//add a -1 in n-s.top()
R[s.top()] = n-s.top()-1;
s.pop();
}
//after changing the L & R arrays,
//L[i] & R[i] represent length of sub-array with elements,
//smaller than a[i] to the left and right respectively
ans=0;
for(int i=0;i<n;i++){
//now x will represent the range in which a[i] is maximum
x = (L[i] + R[i] + 1)%mod;
x = (x * a[i]);
ans = (ans + x)%mod;
}
cout<<ans<<endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIHNjKHgpIHNjYW5mKCIlZCIsJngpOwojZGVmaW5lIHByKHgpIHByaW50ZigiJWQgXG4iLHgpOwojZGVmaW5lIHNjbGwoeCkgc2NhbmYoIiVsbGQiLCZ4KTsKI2RlZmluZSBzY2xsMih4LHkpIHNjYW5mKCJsbGQiLCZ4LCZ5KTsKI2RlZmluZSBwcmxsKHgpIHByaW50ZigiJWxsZCBcbiIseCk7CiNkZWZpbmUgc2MyKHgseSkgc2NhbmYoImQiLCZ4LCZ5KTsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBQQiBwdXNoX2JhY2sKI2RlZmluZSBNUCBtYWtlX3BhaXIKI2RlZmluZSBQSUkgIHBhaXI8aW50LGludD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBuLGwscjsKbGwgYVsxMDAwMDArMTBdLHgsbW9kPTFlOSArIDc7CmludCBSWzEwMDAwMCsxMF0sTFsxMDAwMDArMTBdOwpsbCBhbnM7CnN0YWNrPGludD4gczsKCmludCBtYWluKCl7CiAgICAvLyBtb3ZlIHRoZSBkZWNsYXJhdGlvbiBpbnNpZGUgYXMgaXQgY2FudCBiZSBoYW5kbGVkIGJ5IHRoZSBzdGFjaywKICAgIHNjYW5mKCIlZCIsJm4pOwogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgc2NhbmYoIiVsbGQiLCZhW2ldKTsKICAgICAgICAvLyByZW1vdmUgdGhlIG1vZCBzdGF0ZW1lbnQgdG8gcHJldmVudCBjaGFuZ2luZyB0aGUgdmFsdWUgYmVmb3JlaGFuZAogICAgICAgIGFbaV0gKz0gaSsxOwogICAgfQoKICAgIExbMF09MDsKICAgIHMucHVzaCgwKTsKICAgIGZvcihpbnQgaT0xO2k8bjtpKyspewogICAgICAgIHdoaWxlKCFzLmVtcHR5KCkgJiYgYVtpXSA+IGFbcy50b3AoKV0pewogICAgICAgICAgICAvL2FkZCBhIC0xIGluIGktcy50b3AoKQogICAgICAgICAgICBSW3MudG9wKCldID0gaS0xLXMudG9wKCk7CiAgICAgICAgICAgIHMucG9wKCk7CiAgICAgICAgfQogICAgICAgIC8vYWRkIGEgLTEgaW4gaS1zLnRvcCgpCiAgICAgICAgTFtpXSA9IChzLmVtcHR5KCkpPyBpIDogaS1zLnRvcCgpLTE7CiAgICAgICAgcy5wdXNoKGkpOwogICAgfQogICAgd2hpbGUoIXMuZW1wdHkoKSl7CiAgICAgICAgLy9hZGQgYSAtMSBpbiBuLXMudG9wKCkKICAgICAgICBSW3MudG9wKCldID0gbi1zLnRvcCgpLTE7CiAgICAgICAgcy5wb3AoKTsKICAgIH0KICAgIC8vYWZ0ZXIgY2hhbmdpbmcgdGhlIEwgJiBSIGFycmF5cywKICAgIC8vTFtpXSAmIFJbaV0gcmVwcmVzZW50IGxlbmd0aCBvZiBzdWItYXJyYXkgd2l0aCBlbGVtZW50cywKICAgIC8vc21hbGxlciB0aGFuIGFbaV0gdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseQogICAgYW5zPTA7CiAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICAvL25vdyB4IHdpbGwgcmVwcmVzZW50IHRoZSByYW5nZSBpbiB3aGljaCBhW2ldIGlzIG1heGltdW0KICAgICAgICB4ID0gKExbaV0gKyBSW2ldICsgMSklbW9kOwogICAgICAgIHggPSAoeCAqIGFbaV0pOyAKICAgICAgICBhbnMgPSAoYW5zICsgeCklbW9kOwogICAgfQogICAgY291dDw8YW5zPDxlbmRsOwp9Cg==