#include <iostream>
#include <vector>
#include <map>
#include <stack>
//#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;
int main()
{
ios_base::sync_with_stdio(false);
int n;
cin >> n;
vector<int> v(n);
for(int i = 0; i < n; i++) {
cin >> v[i];
}
vector<int> left(n, -1), right(n, n);
stack<int> st;
for(int i = 0; i < n; i++) {
while(!st.empty() and v[st.top()] > v[i]) {
st.pop();
}
if(!st.empty()) {
left[i] = st.top();
}
st.push(i);
}
stack<int> st2;
for(int i = n - 1; i >= 0; i--) {
while(!st2.empty() and v[st2.top()] > v[i]) {
st2.pop();
}
if(!st2.empty()) {
right[i] = st2.top();
}
st2.push(i);
}
ll total_subarrays = (ll)n * (ll) (n + 1) / 2LL;
total_subarrays %= MOD;
ll bad_subarrays = 0;
for(int i = 0; i < n; i++) {
ll L = i - left[i], R = right[i] - i;
bad_subarrays += (L * R) % MOD;
bad_subarrays %= MOD;
}
cout << (total_subarrays - bad_subarrays + MOD) % MOD << endl;
return 0;
}