#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long po(long long x, long long n) {
  long long ans = 1;
  while (n > 0) {
    if (n & 1) ans = (ans * x);
    x = (x * x);
    n /= 2;
  }
  return ans;
}
vector<long long> v[200000 + 10];
long long a[200000 + 10];
long long n;
long long t[4 * 200000 + 50];
void build(long long v, long long tl, long long tr) {
  if (tl == tr)
    t[v] = 1;
  else {
    long long tm = (tl + tr) / 2;
    build(2 * v, tl, tm);
    build(2 * v + 1, tm + 1, tr);
    t[v] = t[2 * v] + t[2 * v + 1];
  }
}
void update(long long v, long long tl, long long tr, long long pos,
            long long del) {
  if (tl == tr)
    t[v] += del;
  else {
    long long tm = (tl + tr) / 2;
    if (pos <= tm)
      update(2 * v, tl, tm, pos, del);
    else
      update(2 * v + 1, tm + 1, tr, pos, del);
    t[v] = t[2 * v] + t[2 * v + 1];
  }
}
long long query(long long v, long long tl, long long tr, long long l,
                long long r) {
  if (tl == l && tr == r) return t[v];
  if (l > r) return 0;
  long long tm = (tl + tr) / 2;
  return query(2 * v, tl, tm, l, min(tm, r)) +
         query(2 * v + 1, tm + 1, tr, max(tm + 1, l), r);
}
void func() {
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
    if (a[i] <= n) v[a[i]].push_back(i);
  }
  long long ans = 0;
  build(1, 1, n);
  for (int i = 1; i < n; i++) {
    ans += query(1, 1, n, i + 1, min(a[i], n));
    for (int j = 0; j < v[i].size(); j++) update(1, 1, n, v[i][j], -1);
  }
  cout << ans << "\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long t = 1;
  while (t--) func();
}
