#include <bits/stdc++.h>
using namespace std;
bool vis[100001];
long long cnt, arr[100001];
;
void dfs(int x) {
  vis[x] = 1;
  cnt++;
  if (!vis[arr[x]]) dfs(arr[x]);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long n;
  vector<long long> vec;
  cin >> n;
  fill(vis, vis + n + 1, 0);
  for (int i = 1; i <= n; i++) cin >> arr[i];
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      cnt = 0;
      dfs(i);
      vec.push_back(cnt);
    }
  }
  if (vec.size() == 1)
    cout << vec[0] * vec[0];
  else {
    sort(vec.begin(), vec.end());
    cnt = (vec[vec.size() - 1] + vec[vec.size() - 2]) *
          (vec[vec.size() - 1] + vec[vec.size() - 2]);
    for (int i = vec.size() - 3; i >= 0; i--) cnt += vec[i] * vec[i];
    cout << cnt;
  }
}
