/*
www.youtube.com/YugiHackerChannel
oj.vnoi.info/user/YugiHackerKhongCopCode
*/
#include<bits/stdc++.h>
#define el cout<<"\n"
#define f0(i,n) for(int i=0;i<n;++i)
#define f1(i,n) for(int i=1;i<=n;++i)
#define maxn 500005
#define MOD 1000000000
using namespace std;
int n;
long long a[maxn];
long long ans;
long long smin[maxn], smax[maxn], smm[maxn];
long long gmin[maxn], gmax[maxn], gmm[maxn];
long long val(long long l, long long r)
{
return (l + r) * (r - l + 1) / 2 % MOD;
}
void solve(int l, int r)
{
if (l == r)
{
(ans += a[l] * a[l]) %= MOD;
return;
}
int mid = (l+r)/2;
solve(l, mid);
solve(mid + 1, r);
long long ma = 0, mi = 1e9;
smin[mid] = smax[mid] = smm[mid] = gmin[mid] = gmax[mid] = gmm[mid] = 0;
for (int i=mid+1; i<=r; ++i)
{
ma = max(ma, a[i]), mi = min(mi, a[i]);
smin[i] = (smin[i-1] + mi) % MOD;
smax[i] = (smax[i-1] + ma) % MOD;
smm[i] = (smm[i-1] + mi * ma) % MOD;
gmin[i] = (gmin[i-1] + mi) % MOD;
gmax[i] = (gmax[i-1] + ma) % MOD;
gmm[i] = (gmm[i-1] + mi * ma % MOD) % MOD;
}
ma = 0, mi = 1e9;
int imin = mid, imax = mid;
for (int i=mid; i >= l; i--)
{
ma = max(ma, a[i]), mi = min(mi, a[i]);
while (imin < r && a[imin+1] >= mi) imin++;
while (imax < r && a[imax+1] <= ma) imax++;
int pmin = min(imin, imax);
int pmax = max(imin, imax);
ans = (ans + mi * ma % MOD * val(mid+2-i, pmin-i+1)) % MOD;
ans = (ans + gmm[r] - gmm[pmax] - (smm[r] - smm[pmax]) % MOD) % MOD;
if (imin < imax)
ans = (ans + ma * (gmin[pmax] - gmin[pmin] - (smin[pmax] - smin[pmin]) % MOD)) % MOD;
else
ans = (ans + mi * (gmax[pmax] - gmax[pmin] - (smax[pmax] - smax[pmin]) % MOD)) % MOD;
}
}
main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> n;
f1 (i, n) cin >> a[i];
solve(1, n);
cout << (ans + MOD) % MOD;
}
LyoKCXd3dy55b3V0dWJlLmNvbS9ZdWdpSGFja2VyQ2hhbm5lbAoJb2oudm5vaS5pbmZvL3VzZXIvWXVnaUhhY2tlcktob25nQ29wQ29kZQoqLwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgojZGVmaW5lIGVsIGNvdXQ8PCJcbiIKI2RlZmluZSBmMChpLG4pIGZvcihpbnQgaT0wO2k8bjsrK2kpCiNkZWZpbmUgZjEoaSxuKSBmb3IoaW50IGk9MTtpPD1uOysraSkKI2RlZmluZSBtYXhuIDUwMDAwNQojZGVmaW5lIE1PRCAxMDAwMDAwMDAwCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbjsKbG9uZyBsb25nIGFbbWF4bl07CmxvbmcgbG9uZyBhbnM7CmxvbmcgbG9uZyBzbWluW21heG5dLCBzbWF4W21heG5dLCBzbW1bbWF4bl07CmxvbmcgbG9uZyBnbWluW21heG5dLCBnbWF4W21heG5dLCBnbW1bbWF4bl07Cgpsb25nIGxvbmcgdmFsKGxvbmcgbG9uZyBsLCBsb25nIGxvbmcgcikKewogICAgcmV0dXJuIChsICsgcikgKiAociAtIGwgKyAxKSAvIDIgJSBNT0Q7Cn0KCnZvaWQgc29sdmUoaW50IGwsIGludCByKQp7CiAgICBpZiAobCA9PSByKQogICAgewogICAgICAgIChhbnMgKz0gYVtsXSAqIGFbbF0pICU9IE1PRDsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbWlkID0gKGwrcikvMjsKCiAgICBzb2x2ZShsLCBtaWQpOwogICAgc29sdmUobWlkICsgMSwgcik7CgogICAgbG9uZyBsb25nIG1hID0gMCwgbWkgPSAxZTk7CiAgICBzbWluW21pZF0gPSBzbWF4W21pZF0gPSBzbW1bbWlkXSA9IGdtaW5bbWlkXSA9IGdtYXhbbWlkXSA9IGdtbVttaWRdID0gMDsKCiAgICBmb3IgKGludCBpPW1pZCsxOyBpPD1yOyArK2kpCiAgICB7CiAgICAgICAgbWEgPSBtYXgobWEsIGFbaV0pLCBtaSA9IG1pbihtaSwgYVtpXSk7CiAgICAgICAgc21pbltpXSA9IChzbWluW2ktMV0gKyBtaSkgJSBNT0Q7CiAgICAgICAgc21heFtpXSA9IChzbWF4W2ktMV0gKyBtYSkgJSBNT0Q7CiAgICAgICAgc21tW2ldID0gKHNtbVtpLTFdICsgbWkgKiBtYSkgJSBNT0Q7CiAgICAgICAgZ21pbltpXSA9IChnbWluW2ktMV0gKyBtaSkgJSBNT0Q7CiAgICAgICAgZ21heFtpXSA9IChnbWF4W2ktMV0gKyBtYSkgJSBNT0Q7CiAgICAgICAgZ21tW2ldID0gKGdtbVtpLTFdICsgbWkgKiBtYSAlIE1PRCkgJSBNT0Q7CiAgICB9CgogICAgbWEgPSAwLCBtaSA9IDFlOTsKICAgIGludCBpbWluID0gbWlkLCBpbWF4ID0gbWlkOwogICAgZm9yIChpbnQgaT1taWQ7IGkgPj0gbDsgaS0tKQogICAgewogICAgICAgIG1hID0gbWF4KG1hLCBhW2ldKSwgbWkgPSBtaW4obWksIGFbaV0pOwogICAgICAgIHdoaWxlIChpbWluIDwgciAmJiBhW2ltaW4rMV0gPj0gbWkpIGltaW4rKzsKICAgICAgICB3aGlsZSAoaW1heCA8IHIgJiYgYVtpbWF4KzFdIDw9IG1hKSBpbWF4Kys7CgogICAgICAgIGludCBwbWluID0gbWluKGltaW4sIGltYXgpOwogICAgICAgIGludCBwbWF4ID0gbWF4KGltaW4sIGltYXgpOwoKICAgICAgICBhbnMgPSAoYW5zICsgbWkgKiBtYSAlIE1PRCAqIHZhbChtaWQrMi1pLCBwbWluLWkrMSkpICUgTU9EOwogICAgICAgIGFucyA9IChhbnMgKyBnbW1bcl0gLSBnbW1bcG1heF0gLSAoc21tW3JdIC0gc21tW3BtYXhdKSAlIE1PRCkgJSBNT0Q7CiAgICAgICAgaWYgKGltaW4gPCBpbWF4KQogICAgICAgICAgICBhbnMgPSAoYW5zICsgbWEgKiAoZ21pbltwbWF4XSAtIGdtaW5bcG1pbl0gLSAoc21pbltwbWF4XSAtIHNtaW5bcG1pbl0pICUgTU9EKSkgJSBNT0Q7CiAgICAgICAgZWxzZQogICAgICAgICAgICBhbnMgPSAoYW5zICsgbWkgKiAoZ21heFtwbWF4XSAtIGdtYXhbcG1pbl0gLSAoc21heFtwbWF4XSAtIHNtYXhbcG1pbl0pICUgTU9EKSkgJSBNT0Q7CiAgICB9Cn0KCm1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiAgICBjaW4gPj4gbjsKICAgIGYxIChpLCBuKSBjaW4gPj4gYVtpXTsKICAgIHNvbHZlKDEsIG4pOwogICAgY291dCA8PCAoYW5zICsgTU9EKSAlIE1PRDsKfQo=