#include <bits/stdc++.h>
using namespace std;
int add(int a, int b) { return (0LL + a + b + 1000000007) % 1000000007; }
int mult(int a, int b) { return (1LL * a * b) % 1000000007; }
void sum(int &a, int b) { a = add(a, b); }
void pdt(int &a, int b) { a = mult(a, b); }
int num[1000005];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = (1); i <= (n); i++) scanf("%d", &num[i]);
  num[0] = 1000000000;
  int ans = 0, tmp = 0;
  for (int i = (1); i <= (n); i++) {
    int l = max(0, num[i] - num[i - 1]);
    int r = num[i] - 1;
    if (i < n && num[i] > num[i + 1]) {
      if (num[i - 1] > num[i + 1]) {
        int l2 = num[i] - num[i + 1];
        sum(ans, l);
        sum(ans, mult(add(tmp, 1), l2 - l));
        tmp = mult(add(tmp, 1), r - l2);
      } else {
        int l0 = num[i] - num[i + 1];
        sum(ans, l0);
        tmp = add(mult(add(tmp, 1), r - l), l - l0);
      }
    } else {
      tmp = mult(add(tmp, 1), r - l);
      if (num[i - 1] < num[i])
        sum(tmp, l);
      else
        sum(ans, l);
    }
    sum(ans, tmp);
  }
  printf("%d\n", ans);
  return 0;
}
