#include <bits/stdc++.h>
using namespace std;
long long f[2][1000005];
long long h[1000005];
int n;
int main() {
  scanf("%d", &n);
  for (int i = (0); i < (n); i++) scanf("%lld", h + i);
  long long res = 0;
  for (int i = (1); i < (n + 1); i++) {
    long long mx = h[i - 1] - 1;
    f[1][i] = h[i - 1] - 1;
    if (i != 1) {
      if (h[i - 1] >= h[i - 2]) {
        long long mn = h[i - 1] - h[i - 2] + 1;
        f[1][i] += (mx - mn + 1) * f[0][i - 1];
      } else {
        long long mn = 1;
        f[1][i] += (mx - mn + 1) * f[0][i - 1];
      }
    }
    f[1][i] %= 1000000007ll;
    res += f[1][i];
    if (i != n) {
      long long mn = h[i - 1] >= h[i] ? h[i - 1] - h[i] + 1 : 1;
      f[0][i] += mx - mn + 1;
      if (i != 1) {
        if (h[i - 1] >= h[i - 2]) {
          long long MN = max(mn, h[i - 1] - h[i - 2] + 1);
          f[0][i] += (mx - MN + 1) * f[0][i - 1];
        } else {
          f[0][i] += (mx - mn + 1) * f[0][i - 1];
        }
      }
    }
    f[0][i] %= 1000000007ll;
  }
  printf("%lld\n", res % 1000000007ll);
}
