#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> G[100010];
int vis[100010];
long long sz[100010];
int cnt = 0;
int dfs(int u) {
  int res = 1;
  for (int i = 0; i < G[u].size(); i++) {
    if (!vis[G[u][i]]) {
      vis[G[u][i]] = 1;
      res += dfs(G[u][i]);
    }
  }
  return res;
}
bool cmp(const long long &a, const long long &b) { return a > b; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int p;
    scanf("%d", &p);
    G[i].push_back(p);
  }
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      vis[i] = 1;
      sz[cnt++] = dfs(i);
    }
  }
  sort(sz, sz + cnt, cmp);
  if (cnt == 1) {
    cout << sz[0] * sz[0] << endl;
    return 0;
  } else {
    long long ans = (sz[0] + sz[1]) * (sz[0] + sz[1]);
    for (int i = 2; i < cnt; i++) {
      ans += sz[i] * sz[i];
    }
    cout << ans << endl;
  }
  return 0;
}
