#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=(a),_b=(b); i<=_b; ++i)
#define fi first
#define se second
#define el "\n"
#define pb push_back
#define sz(a) (int)a.size()
#define FILL(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
const int N = 100000 + 5;
const int MOD = 1000000007;
int n;
int p[N], indeg[N];
vector<int> revG[N];
int incy[N], dep[N], vis[N];
int spf[N];
int pw[N];
void sieve(int m){
FILL(spf,0);
FOR(i,2,m) if(!spf[i]){
for(int j=i;j<=m;j+=i) if(!spf[j]) spf[j]=i;
}
}
ll power_mod(ll a,int e){
ll r = 1;
while(e){
if(e & 1) r = r * a % MOD;
a = a * a % MOD;
e >>= 1;
}
return r;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> n;
FOR(i,1,n){
cin >> p[i];
indeg[p[i]]++;
revG[p[i]].pb(i);
}
FILL(incy,1);
queue<int> q;
FOR(i,1,n) if(indeg[i]==0) q.push(i);
while(!q.empty()){
int u = q.front(); q.pop();
incy[u] = 0;
int v = p[u];
indeg[v]--;
if(indeg[v]==0) q.push(v);
}
queue<int> q2;
FILL(vis,0);
FOR(i,1,n) if(incy[i]){
vis[i]=1;
dep[i]=0;
q2.push(i);
}
int H = 0;
while(!q2.empty()){
int u = q2.front(); q2.pop();
if(dep[u]>H) H = dep[u];
for(int j=0;j<sz(revG[u]);++j){
int v = revG[u][j];
if(!vis[v]){
vis[v]=1;
dep[v]=dep[u]+1;
if(dep[v]>H) H = dep[v];
q2.push(v);
}
}
}
sieve(n);
FILL(pw,0);
FILL(vis,0);
FOR(i,1,n) if(incy[i] && !vis[i]){
int u = i, len = 0;
while(!vis[u]){
vis[u]=1;
len++;
u = p[u];
}
int x = len;
while(x>1){
int pr = spf[x];
int cnt = 0;
while(x%pr==0){
x/=pr;
cnt++;
}
if(cnt > pw[pr]) pw[pr] = cnt;
}
}
ll L = 1;
FOR(i,2,n) if(pw[i]){
L = L * power_mod(i, pw[i]) % MOD;
}
ll ans = (L + (ll)H) % MOD;
cout << ans << el;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGk9KGEpLF9iPShiKTsgaTw9X2I7ICsraSkKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBzeihhKSAoaW50KWEuc2l6ZSgpCiNkZWZpbmUgRklMTChhLHgpIG1lbXNldChhLHgsc2l6ZW9mKGEpKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsaW50PiBpaTsKCmNvbnN0IGludCBOID0gMTAwMDAwICsgNTsKY29uc3QgaW50IE1PRCA9IDEwMDAwMDAwMDc7CgppbnQgbjsKaW50IHBbTl0sIGluZGVnW05dOwp2ZWN0b3I8aW50PiByZXZHW05dOwppbnQgaW5jeVtOXSwgZGVwW05dLCB2aXNbTl07CgppbnQgc3BmW05dOwppbnQgcHdbTl07Cgp2b2lkIHNpZXZlKGludCBtKXsKICAgIEZJTEwoc3BmLDApOwogICAgRk9SKGksMixtKSBpZighc3BmW2ldKXsKICAgICAgICBmb3IoaW50IGo9aTtqPD1tO2orPWkpIGlmKCFzcGZbal0pIHNwZltqXT1pOwogICAgfQp9CgpsbCBwb3dlcl9tb2QobGwgYSxpbnQgZSl7CiAgICBsbCByID0gMTsKICAgIHdoaWxlKGUpewogICAgICAgIGlmKGUgJiAxKSByID0gciAqIGEgJSBNT0Q7CiAgICAgICAgYSA9IGEgKiBhICUgTU9EOwogICAgICAgIGUgPj49IDE7CiAgICB9CiAgICByZXR1cm4gcjsKfQoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7IGNvdXQudGllKE5VTEwpOwoKICAgIGNpbiA+PiBuOwogICAgRk9SKGksMSxuKXsKICAgICAgICBjaW4gPj4gcFtpXTsKICAgICAgICBpbmRlZ1twW2ldXSsrOwogICAgICAgIHJldkdbcFtpXV0ucGIoaSk7CiAgICB9CgogICAgRklMTChpbmN5LDEpOwogICAgcXVldWU8aW50PiBxOwogICAgRk9SKGksMSxuKSBpZihpbmRlZ1tpXT09MCkgcS5wdXNoKGkpOwogICAgd2hpbGUoIXEuZW1wdHkoKSl7CiAgICAgICAgaW50IHUgPSBxLmZyb250KCk7IHEucG9wKCk7CiAgICAgICAgaW5jeVt1XSA9IDA7CiAgICAgICAgaW50IHYgPSBwW3VdOwogICAgICAgIGluZGVnW3ZdLS07CiAgICAgICAgaWYoaW5kZWdbdl09PTApIHEucHVzaCh2KTsKICAgIH0KCiAgICBxdWV1ZTxpbnQ+IHEyOwogICAgRklMTCh2aXMsMCk7CiAgICBGT1IoaSwxLG4pIGlmKGluY3lbaV0pewogICAgICAgIHZpc1tpXT0xOwogICAgICAgIGRlcFtpXT0wOwogICAgICAgIHEyLnB1c2goaSk7CiAgICB9CiAgICBpbnQgSCA9IDA7CiAgICB3aGlsZSghcTIuZW1wdHkoKSl7CiAgICAgICAgaW50IHUgPSBxMi5mcm9udCgpOyBxMi5wb3AoKTsKICAgICAgICBpZihkZXBbdV0+SCkgSCA9IGRlcFt1XTsKICAgICAgICBmb3IoaW50IGo9MDtqPHN6KHJldkdbdV0pOysrail7CiAgICAgICAgICAgIGludCB2ID0gcmV2R1t1XVtqXTsKICAgICAgICAgICAgaWYoIXZpc1t2XSl7CiAgICAgICAgICAgICAgICB2aXNbdl09MTsKICAgICAgICAgICAgICAgIGRlcFt2XT1kZXBbdV0rMTsKICAgICAgICAgICAgICAgIGlmKGRlcFt2XT5IKSBIID0gZGVwW3ZdOwogICAgICAgICAgICAgICAgcTIucHVzaCh2KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBzaWV2ZShuKTsKICAgIEZJTEwocHcsMCk7CiAgICBGSUxMKHZpcywwKTsKICAgIEZPUihpLDEsbikgaWYoaW5jeVtpXSAmJiAhdmlzW2ldKXsKICAgICAgICBpbnQgdSA9IGksIGxlbiA9IDA7CiAgICAgICAgd2hpbGUoIXZpc1t1XSl7CiAgICAgICAgICAgIHZpc1t1XT0xOwogICAgICAgICAgICBsZW4rKzsKICAgICAgICAgICAgdSA9IHBbdV07CiAgICAgICAgfQogICAgICAgIGludCB4ID0gbGVuOwogICAgICAgIHdoaWxlKHg+MSl7CiAgICAgICAgICAgIGludCBwciA9IHNwZlt4XTsKICAgICAgICAgICAgaW50IGNudCA9IDA7CiAgICAgICAgICAgIHdoaWxlKHglcHI9PTApewogICAgICAgICAgICAgICAgeC89cHI7CiAgICAgICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihjbnQgPiBwd1twcl0pIHB3W3ByXSA9IGNudDsKICAgICAgICB9CiAgICB9CgogICAgbGwgTCA9IDE7CiAgICBGT1IoaSwyLG4pIGlmKHB3W2ldKXsKICAgICAgICBMID0gTCAqIHBvd2VyX21vZChpLCBwd1tpXSkgJSBNT0Q7CiAgICB9CgogICAgbGwgYW5zID0gKEwgKyAobGwpSCkgJSBNT0Q7CiAgICBjb3V0IDw8IGFucyA8PCBlbDsKICAgIHJldHVybiAwOwp9Cgo=