import heapq

def imerge(iterables):
    """Merge sorted iterables."""

    iterables = [iter(x) for x in iterables]
    queue = []
    for i, it in enumerate(iterables):
        try:
            heapq.heappush(queue, (it.next(), i))
        except StopIteration:
            pass
    while queue:
        item, topit = queue[0]
        yield item
        try:
            heapq.heapreplace(queue, (iterables[topit].next(), topit))
        except StopIteration:
            heapq.heappop(queue)

>>> it1 = [34, 76, 77, 99]
>>> it2 = [0, 3, 56, 70]
>>> it3 = [2, 7, 9, 14]
>>> list(imerge([it1, it2, it3]))
[0, 2, 3, 7, 9, 14, 34, 56, 70, 76, 77, 99]