#include <bits/stdc++.h>
const int Mod = (int)1e9 + 7;
const int MX = 1073741822;
const long long MXLL = 9223372036854775807;
const int Sz = 1110111;
using namespace std;
inline void Read_rap() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
}
int n;
int a[Sz];
long long t[Sz];
const int N = 1e6;
inline void upd(int id, long long d) {
  for (int i = id; i <= N; i = (i | (i + 1))) t[i] += d;
}
inline long long get(int r) {
  long long res = 0;
  for (int i = r; i >= 0; i = (i & (i + 1)) - 1) res += t[i], res %= Mod;
  return res;
}
inline long long get(int l, int r) {
  long long res = get(r) - get(l - 1) + Mod;
  res %= Mod;
  return res;
}
int main() {
  Read_rap();
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  upd(0, 1);
  for (int i = 1; i <= n; i++) {
    long long dp = get(0, a[i]);
    dp = (dp * a[i]) % Mod;
    dp -= get(a[i], a[i]);
    if (dp < 0) dp += Mod;
    upd(a[i], dp);
  }
  cout << get(1, N);
  return 0;
}
