#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
#define FOR(i, n) for(int (i)=0; (i)<(n); (i)++)
#define FOR1(i, n) for(int (i)=1; (i)<=(n); (i)++)
#define FORI(i, n) for(int (i)=n-1; (i)>=0; (i)--)
template<class T, class U> void umin(T& x, const U& y){ x = min(x, (T)y);}
template<class T, class U> void umax(T& x, const U& y){ x = max(x, (T)y);}
template<class T> void print(T& v){ for(auto it : v) cout << it << " "; cout << endl; }
template<class T, class U> void init(vector<T> &v, U x, size_t n) { v=vector<T>(n, (T)x); }
template<class T, class U, typename... W> void init(vector<T> &v, U x, size_t n, W... m) { v=vector<T>(n);  for(auto& a : v) init(a, x, m...); }

int n;
vector<ll> a;
vector<vector<int>> p, nn;
const int MOD = 1e9+7;
vector<vi> cache;
int solve(int i, int k){
    if (k > n) return 0;
    if (k == n) return 1;
    if (i > n) return 0;
    if (cache[i][k] != -1) return cache[i][k];
    ll r = 0;
//    int s = 0;
    int j = nn[i][k];
    r += solve(i+1, j+1);
    r -= MOD * (r >= MOD);
    r += solve(i, j+1);
    r -= MOD * (r >= MOD);
//    for(int j = k; j < n; j++){
//        int ds = a[j] % i;
//        s = s + ds;
//        if (s >= i) s -= i;
//        if (s == 0){
//            r += solve(i+1, j+1);
//            r -= MOD * (r >= MOD);
//            r += solve(i, j+1);
//            r -= MOD * (r >= MOD);
//            break;
//        }
//    }
    return cache[i][k] = r;
}

//#define TEST 1
int main(int argc, char** argv) {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cout << setprecision(15);
    if (argc == 2 && atoi(argv[1]) == 123456789) freopen("d:\\code\\cpp\\contests\\stdin", "r", stdin);

#if TEST
    n = 3000;
    a.resize(n);
    FOR(i, n)
        a[i] = rand() * (1LL + rand());
#else
    cin >> n;
    a.resize(n);
    FOR(i, n) cin >> a[i];
#endif
    init(p, 0, n+1, n+1);
    init(nn, 0, n+1, n+1);
    FOR1(i, n){
        FOR(k, n){
            if (k) p[i][k] = p[i][k-1];
            p[i][k] += a[k] % i;
            p[i][k] -= i * (p[i][k] >= i);
        }
        map<int, int> H;
        FORI(k, n){
            H[p[i][k]] = k;
            int pr = 0;
            if (k) pr = p[i][k-1];
            if (H.count(pr))
                nn[i][k] = H[pr];
            else
                nn[i][k] = n;
        }
    }

    init(cache, -1, n+1, n+1);

    const ll i2 = (MOD+1)/2;
    cout << solve(1, 0) * i2 % MOD << endl;

//    FOR(i, n){
//        FOR(j, n)
//            cout << cache[i][j] << " ";
//        cout << endl;
//    }

    if (argc == 2 && atoi(argv[1]) == 123456789) cout << clock()*1.0/CLOCKS_PER_SEC << " sec\n";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

constexpr int mod = 1000000007;

long long dp[3005][3005],sum[3005][3005],tmp[3005][3005];

int main() {
    int N;
    cin >> N;
    vector<long long>A(N);
    for(int i = 0; i < N; i++) {
        cin >> A[i];
    }
    for(int i = 0; i < N; i++) {
        long long tmp2 = 0;
        for(int j = 0; j < N; j++) {
            tmp2 += A[j];
            tmp2 %= (i+1);
            tmp[i][j] = tmp2;
        }
    }
    for(int i = 0; i < N; i++) {
        dp[i][0] = 1;
    }
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < N; j++) {
            dp[i][j] += sum[j][tmp[j][i]];
            dp[i][j] %= mod;
        }
        for(int j = 0; j < N; j++) {
            sum[j+1][tmp[j+1][i]] += dp[i][j];
            sum[j+1][tmp[j+1][i]] %= mod;
        }
    }
    long long ans = 0;
    for(int i = 0; i < N; i++) {
        ans += dp[N-1][i];
        ans %= mod;
    }
    cout << ans << endl;
}
