#include <bits/stdc++.h>
using namespace std;
using namespace std;
long long M[100000][20];
long long A[100000];
long long N;
long long dp[100000];
void build() {
  int i, j;
  for (i = 0; i < N; i++) M[i][0] = i;
  for (j = 1; 1 << j <= N; j++)
    for (i = 0; i + (1 << j) - 1 < N; i++)
      if (A[M[i][j - 1]] > A[M[i + (1 << (j - 1))][j - 1]])
        M[i][j] = M[i][j - 1];
      else
        M[i][j] = M[i + (1 << (j - 1))][j - 1];
}
long long query(int i, int j) {
  int k = log2(j - i + 1);
  if (A[M[i][k]] > A[M[j - (1 << k) + 1][k]])
    return M[i][k];
  else
    return M[j - (1 << k) + 1][k];
}
int main() {
  cin >> N;
  for (int i = 0; i < N - 1; i++) cin >> A[i];
  build();
  dp[N - 1] = 0;
  dp[N - 2] = 1;
  long long ans = 0;
  if (N >= 2) ans += 1;
  for (int i = N - 3; i >= 0; i--) {
    int m = query(i + 1, A[i] - 1);
    dp[i] = dp[m] - (A[i] - m) + N - i;
    ans += dp[i];
  }
  cout << ans << endl;
}
