#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
bool debug = 1;
const int N = 1e5 + 10;
bool vis[N];
int g[N];
int dfs(int i) {
  vis[i] = 1;
  if (!vis[g[i]]) {
    return 1 + dfs(g[i]);
  }
  return 1;
}
int main() {
  int n, x;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &x);
    x--;
    g[i] = x;
  }
  vector<int> vc;
  for (int i = 0; i < n; i++) {
    if (!vis[i]) vc.push_back(dfs(i));
  }
  long long tot = 0;
  sort(vc.begin(), vc.end(), greater<int>());
  for (int i = 0; i < min((int)vc.size(), 2); i++) {
    tot += vc[i];
  }
  tot = tot * tot;
  for (int i = 2; i <= vc.size() - 1; i++) {
    tot += 1ll * vc[i] * vc[i];
  }
  cout << tot << endl;
  return 0;
}
