#include <bits/stdc++.h>
using namespace std;
vector<vector<long long> > op(100100);
bool visit[100100];
int n;
int v = 1;
void dfs(int node) {
  visit[node] = 1;
  if (!visit[op[node][0]]) {
    v++;
    dfs(op[node][0]);
  }
}
vector<long long> res;
void conected_compont() {
  int i;
  for (i = 1; i <= n; i++) {
    if (!visit[i]) {
      v = 1;
      dfs(i);
      res.push_back(v);
    }
  }
}
int main() {
  cin >> n;
  int i;
  for (i = 1; i <= n; i++) {
    int x;
    cin >> x;
    op[i].push_back(x);
  }
  conected_compont();
  if (res.size() == 1) {
    cout << res[0] * res[0];
    return 0;
  }
  sort(res.begin(), res.end());
  long long sum = 0;
  for (i = 0; i < res.size() - 2; i++) {
    sum += (res[i] * res[i]);
  }
  long long f = ((res[res.size() - 1] + res[res.size() - 2]) *
                 ((res[res.size() - 1] + res[res.size() - 2])));
  sum += f;
  cout << sum;
  return 0;
}
