#include <bits/stdc++.h>
using namespace std;
const int N = 100100, MOD = 1e9 + 7;
long long node[N * 10 * 5], n;
void change(int l, int r, long long p, long long o, int x) {
  if (l == r) {
    node[x] = o;
    return;
  }
  int m = (l + r) / 2;
  if (p > m)
    change(m + 1, r, p, o, x * 2 + 1);
  else
    change(l, m, p, o, x * 2);
  node[x] = (node[x * 2] + node[x * 2 + 1]) % MOD;
}
long long get(int l, int r, long long ln, int rn, int x) {
  if (l >= ln && r <= rn) return node[x];
  if (l == r) return 0;
  int m = (l + r) / 2;
  long long k = 0;
  if (ln <= m) k += get(l, m, ln, rn, x * 2);
  if (rn > m) k += get(m + 1, r, ln, rn, x * 2 + 1);
  return (k % MOD);
}
int main() {
  cin >> n;
  long long mx = 1000000;
  for (int i = 0; i < n; i++) {
    long long a;
    cin >> a;
    long long o = ((get(1, mx, 1, a, 1) + 1) * a) % MOD;
    change(1, mx, a, o, 1);
  }
  cout << get(1, mx, 1, mx, 1) << endl;
  return 0;
}
