#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(x, s, t) for(llint (x) = (s); (x) <= (t); (x)++) #define chmin(x, y) (x) = min((x), (y)) #define chmax(x, y) (x) = max((x), (y)) #define all(x) (x).begin(),(x).end() #define inf 1e18 #define mod 1000000007 using namespace std; typedef long long llint; typedef long long ll; typedef pair P; const ll B = 320; ll n; ll a[100005]; ll dp[100005]; ll sum[B][100005]; int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> n; rep(i, 1, n) cin >> a[i]; dp[1] = 1; rep(i, 1, n){ if(i > 1){ if(a[i-1] != 1) dp[i] = dp[i-1]; rep(j, 1, B-1) if(i-j >= 1) dp[i] += sum[j][i-j]; dp[i] %= mod; } rep(j, 1, B-1){ ll s = 0; if(i-j >= 1) s = sum[j][i-j]; sum[j][i] = s; if(j == a[i]) sum[j][i] += dp[i]; if(sum[j][i] >= mod) sum[j][i] -= mod; } if(a[i] >= B){ return -1; rep(j, 1, n){ if(i+j*a[i] > n) break; dp[i+j*a[i]] += dp[i]; if(dp[i+j*a[i]] >= mod) dp[i+j*a[i]] -= mod; } } } cout << dp[n] << endl; /*rep(i, 1, n) cout << sum[1][i] << " "; cout << endl; rep(i, 1, n) cout << sum[2][i] << " "; cout << endl; rep(i, 1, n) cout << dp[i] << " "; cout << endl;*/ return 0; }