#include <bits/stdc++.h>
using namespace std;
const int maxi = 2e6 + 6;
const long long mo = 1e9 + 7;
long long a[maxi];
int n;
long long bit[maxi];
long long dp[maxi];
void update(int poz, long long x) {
  for (int i = poz; i < maxi; i += i & (-i)) bit[i] = (bit[i] + x) % mo;
}
long long get(int poz) {
  long long ans = 0;
  for (int i = poz; i > 0; i -= i & (-i)) ans = (ans + bit[i]) % mo;
  return ans;
}
int main() {
  cin >> n;
  update(1, 1ll);
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    a[i]++;
  }
  for (int i = 1; i <= n; i++) {
    dp[i] = (get(a[i]) * (a[i] - 1) - (get(a[i]) - get(a[i] - 1)) + mo) % mo;
    update(a[i], dp[i]);
  }
  long long res = 0;
  for (int i = 1; i <= n; i++) {
    res = (res + dp[i]) % mo;
  }
  cout << res << "\n";
  return 0;
}
