Swift3にて、tableViewControllerのセルのindexによって画面遷移先を指定し、遷移した先の画面同士でページ移動できるようにし、tableView(初期画面)に戻る時はNavigationControllerの戻るボタンで戻れるアプリを作りたいと思っております。

<苦戦しているところ>
tableViewControllerのあるviewControllerからpageViewControllerにセグエで接続し、pageViewControllerからそれぞれページを表示させているのですが、その際に次のページに値(index)を渡そうとしているのですが、うまくいきません。

※ viewControllerにはNavigationControllerをEmbedしてあります。

TableViewControllerのあるViewController

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

var indexCell:Int?

override func viewDidLoad() {
    super.viewDidLoad()


(略)

//セルを作る
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    let cellData = section0[(indexPath as NSIndexPath).row]
    cell.textLabel?.text = cellData.0
    cell.detailTextLabel?.text = cellData.1
    return cell
}


//セルがタップされた時の処理
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
    indexCell = indexPath.row
    performSegue(withIdentifier: "segue1",sender: self)

}

//セグエで移動する前にデータを受け渡す
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segue1" {
        if let indexPath = self.tableView.indexPathForSelectedRow {     
            tableView.deselectRow(at: indexPath, animated: false)      
            if let pvc = segue.destination as? PageViewController {
                pvc.received = indexCell       
            }
        }
    }
}


}

pageViewController

class PageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var contentVCs = [UIViewController]()

var select:Int?

//遷移後に渡される値を格納する
var received:Int?

override func viewDidLoad() {
    super.viewDidLoad()

    dataSource = self
    delegate = self

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let fvc = storyboard.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
    fvc.received = received
    let svc = storyboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
    svc.received = received
    let tvc = storyboard.instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController
    tvc.received = received

    contentVCs.append(fvc)
    contentVCs.append(svc)
    contentVCs.append(tvc)

    // タップされたcellのindexによって表示VCを分岐
    switch received! {
        case 0,3,6,9,12,15,18 :
        select = 0
        case 1,4,7,10,13,16,19 :
        select = 1
        case 2,5,8,11,14,17,20 :
        select = 2
    default :
        break
    }

    setViewControllers([contentVCs[select!]], direction: .forward, animated: true, completion: nil)

}


// MARK: - UIPageViewControllerDataSource

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    guard let index = contentVCs.index(of: viewController), index != NSNotFound else { return nil }
    if index < contentVCs.count - 1 {
        return contentVCs[index + 1]
    } else {
        return nil
    }
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
    guard let index = contentVCs.index(of: viewController), index != NSNotFound else { return nil }
    if index > 0 {
        return contentVCs[index - 1]
    } else {
        return nil
    }
}
}

FirstViewController(second,thirdも同じ)

class FirstViewController: UIViewController {

@IBOutlet weak var indexLabel: UILabel!

//シーン移動の際に設定されるデータ
var received:Int?

override func viewDidLoad() {
    super.viewDidLoad()


// 受取りdata確認用ラベル
indexLabel.text = String(received!)

}

}

このコードだと、セルのindex通りのvcを選んで表示されるのですが、ページをめくると同じindex番号のまま(タップした時のセルのindex)になってしまいます。ページが進んだらindex番号もカウントアップさせたりダウンさせたりしたいのですが、Before/Afterのところで値を渡せたらいいのかと思いましたが、適切なコードが書けず苦戦しております。
長くなりましたが、分かる方いらっしゃいましたらご教授お願い致します。

<回答を参考に修正したコード>

// MARK: - UIPageViewControllerDataSource

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    guard let index = contentVCs.index(of: viewController), index != NSNotFound else { return nil }
    let nextIndex = index + 1
    if index == 0 {
        if let nextVC = contentVCs[nextIndex] as? SecondViewController {
            nextVC.received = nextIndex 
            return nextVC
        }
        return nil
    } else if index == 1 {
        if let nextVC = contentVCs[nextIndex] as? ThirdViewController {
            nextVC.received = nextIndex
            return nextVC
        }
        return nil
    } else {
        return nil
    }
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
    guard let index = contentVCs.index(of: viewController), index != NSNotFound else { return nil }
    let nextIndex = index - 1
    if index == 2 {
        if let nextVC = contentVCs[nextIndex] as? SecondViewController {
            nextVC.received = nextIndex
            return nextVC
        }
        return nil
    } else if index == 1 {
        if let nextVC = contentVCs[nextIndex] as? FirstViewController {
            nextVC.received = nextIndex
            return nextVC
        }
        return nil
    } else {
        return nil
    }
}