#include <bits/stdc++.h>
using namespace std;
struct ruby {
  int a;
  int b;
  int c;
};
int n, x, sz, last, szz;
long long ans = 0;
vector<bool> vis;
vector<int> homiara;
vector<ruby> v;
void dfs(int source) {
  if (vis[source] == true)
    return;
  else {
    vis[source] = true;
    sz++;
    last = source;
    dfs(homiara[source]);
  }
}
bool cmp(ruby xx, ruby yy) { return xx.a > yy.a; }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  homiara.resize(n);
  vis.resize(n, false);
  for (int i = 0; i < n; i++) {
    cin >> x;
    x--;
    homiara[i] = x;
  }
  for (int i = 0; i < n; i++) {
    sz = 0;
    if (vis[i] == false) {
      dfs(i);
      ruby r;
      r.a = sz;
      r.b = i;
      r.c = last;
      v.push_back(r);
    }
  }
  sort(v.begin(), v.end(), cmp);
  szz = v.size();
  if (szz >= 2) {
    long long dd = v[0].a + v[1].a;
    ans += 1LL * dd * dd;
    for (int i = 2; i < szz; i++) ans += 1LL * (v[i].a) * (v[i].a);
  } else {
    for (int i = 0; i < szz; i++) ans += 1LL * (v[i].a) * (v[i].a);
  }
  cout << ans << endl;
  return 0;
}
