using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;

namespace Program
{
    interface Output
    {
        void Write(object str);
        void WriteLine(object str);
    }

    interface Input
    {
        int NextInt();
        string NextString();
    }

    class Console_ : Input, Output
    {
        Queue<string> param = new Queue<string>();
        int Input.NextInt()
        {
            if (param.Count == 0)
            {
                foreach (var item in Console.ReadLine().Split(' '))
                {
                    param.Enqueue(item);
                }
            }
            return int.Parse(param.Dequeue());
        }
        string Input.NextString()
        {
            if (param.Count == 0)
            {
                foreach (var item in Console.ReadLine().Split(' '))
                {
                    param.Enqueue(item);
                }
            }
            return param.Dequeue();
        }
        void Output.Write(object str) => System.Console.Write(str.ToString());
        void Output.WriteLine(object str) => System.Console.WriteLine(str.ToString());
    }

    class Debug_ : Input, Output
    {
        int i = 0;
        StringBuilder sb = new StringBuilder();
        public object[] data;
        public string result
        {
            get
            {
                return sb.ToString();
            }
            private set { }
        }
        int Input.NextInt() => (int)data[i++];
        string Input.NextString() => (string)data[i++];

        public void Write(object str) => sb.Append(str.ToString());

        public void WriteLine(object str) => sb.AppendLine(str.ToString());
    }

    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length > 0 && args[0] == "debug")
            {
                try
                {
                    Action<string, object[], string[]> test = (name, input, output) =>
                    {

                        var debug = new Debug_();
                        debug.data = input;
                        new Solver(debug, debug).Run();
                        var res = debug.result.Split("\r\n".ToArray()).ToArray();
                        for (int i = 0; i < res.Length; ++i)
                        {
                            if (i >= output.Length)
                            {
                                if (res[i].Trim() != "")
                                {
                                    Console.WriteLine("failed: " + name);
                                    return;
                                }
                            }
                            else
                            {
                                if (res[i] != output[i])
                                {
                                    Console.WriteLine("failed: " + name);
                                    return;
                                }
                            }
                        }
                        return;
                    };

                    test("case1",
                         new object[] { 3,
7,6,8 },
                         new string[] { "2" });
                    test("case2",
                         new object[] { 3,
12,15,18
 },
                         new string[] { "6" });
                    test("case3",
                         new object[] { 2,
1000000000,1000000000
 },
                         new string[] { "1000000000" });
                }
                finally
                {
                    Console.WriteLine("end");
                    Console.ReadLine();
                }
            }
            else
            {
                new Solver(new Console_(), new Console_()).Run();
            }
        }
    }

    class Solver
    {
        Input input;
        Output output;
        public Solver(Input input, Output output)
        {
            this.input = input;
            this.output = output;
        }

        public void Run()
        {
            var N = input.NextInt();
            var Aary = new int[N];
            for (int i = 0; i < N; ++i)
            {
                Aary[i] = input.NextInt();
            }
            var Lary = new int[N];
            var Rary = new int[N];
            for (int i = 1; i < Aary.Length; ++i)
            {
                if (i == 1)
                {
                    Lary[i - 1] = Aary[i - 1];
                }
                else
                {
                    Lary[i - 1] = gcd(Aary[i - 1], Lary[i - 2]);
                }
            }
            for (int i = Aary.Length - 2; i > -1; --i)
            {
                if (i == Aary.Length - 2)
                {
                    Rary[i + 1] = Aary[i + 1];
                }
                else
                {
                    Rary[i + 1] = gcd(Aary[i + 1], Rary[i + 2]);
                }
            }
            int max = 0;
            for (int i = 0; i < Aary.Length; ++i)
            {
                int v = 0;
                if(i == 0) {
                    v = Rary[i + 1];
                }else if(i == Aary.Length - 1) {
                    v = Lary[i - 1];
                }else {
                    v = gcd(Rary[i + 1], Lary[i - 1]);
                }
                if(max < v) {
                    max = v;
                }
            }

            output.WriteLine(max);
        }

        int gcd(int a, int b)
        {
            if (b == 0) return a;
            return gcd(b, a % b);
        }
    }
}


Measured memory_bytes: 26844