#pragma GCC optimize("Ofast")
#pragma GCC target("avx")

char rbuf[800000];
char e[1000001];
char t[1000001];

main(){
	read(0,rbuf,sizeof rbuf);
	char*r=rbuf;
	int c;

	int n=0;
	while(c=*r++-48,c>=0)n=10*n+c;
	while(n--){
		int x=0;
		while(c=*r++-48,c>=0)x=10*x+c;
		e[x]=1;
	}
	int z=0;
	for(int x=2;x<=1000000;++x){
		if(e[x]){
			int tx=t[x]+1;
			if(z<tx) z=tx;
			for(int y=x;(y+=x)<=1000000;){
				if(t[y]<tx) t[y]=tx;
			}
		}
	}
	printf("%d",z+e[1]);
}