#include <bits/stdc++.h>
using namespace std;
const int module = 1e9 + 7;
const int N = 1e6 + 100;
long long a[N];
long long s[N];
int n;
void nhap() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
  }
}
long long tinh(long long x, long long y) { return (x * y) % module; }
void solve() {
  s[1] = a[1] - 1;
  a[0] = module;
  long long gt = 1;
  for (int i = 2; i <= n; i++) {
    s[i] = a[i] - 1;
    if (a[i] >= a[i - 1]) {
      s[i] += tinh(a[i - 1] - 1, s[i - 1]);
      s[i] %= module;
      gt = (s[i - 1] + 1) % module;
    } else {
      if (a[i - 1] >= a[i - 2] && a[i] >= a[i - 2]) {
        long long x = (s[i - 2] * (a[i - 2] - 1) + (a[i] - 1)) % module;
        gt = x + 1;
        s[i] += x * (a[i] - 1);
        s[i] %= module;
      } else {
        s[i] += tinh(tinh(gt, a[i] - 1), a[i] - 1);
        s[i] %= module;
        gt = tinh(gt, a[i] - 1) + 1;
        gt %= module;
      }
    }
  }
  long long res = 0;
  for (int i = 1; i <= n; i++) {
    res += s[i];
    res %= module;
  }
  printf("%lld", res);
}
int main() {
  nhap();
  solve();
}
