#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000002;
const long long INFLL = 100000000000000000ll;
const long long MOD = 1000000007;
const int MAX = 1000005;
bool Seen[MAX];
int N;
long long DP[MAX], T[MAX];
void update(int x, long long v) {
  while (x < MAX) {
    T[x] += v;
    T[x] %= MOD;
    x += x & -x;
  }
}
long long query(int x) {
  long long ret = 0;
  while (x > 0) {
    ret += T[x];
    x -= x & -x;
  }
  return ret % MOD;
}
int main() {
  cin >> N;
  for (int i = (1); i <= (N); i++) {
    int x;
    scanf("%d", &x);
    long long q = query(x);
    long long prev = DP[x];
    DP[x] = q * x + x;
    DP[x] %= MOD;
    update(x, (DP[x] - prev + MOD) % MOD);
  }
  long long ans = 0;
  for (int i = (1); i <= (MAX - 1); i++) ans += DP[i];
  cout << ans % MOD;
}
